package com.itheima.d3_resource;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Objects;

/**
 * 目标：掌握释放资源的方式:try-catch-finally
 */
public class Test1 {
    public static void main(String[] args) throws Exception {
        copyFile(new File("day09file-io-app/img1/img1.jpeg"),new File("day09file-io-app/img2/img1.jpeg"));
    }

    /**
     * 将源文件复制到目标文件中
     * @param src 源文件
     * @param dest 目标文件
     */
    public static void copyFile(File src, File dest) throws IOException {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //完成文件拷贝
            //1、创建字节输入流，关联源文件，字节输入流关联目标文件
            fis = new FileInputStream(src);
            fos = new FileOutputStream(dest);

            //2、完成输入流读取源文件到内存及输出流将内存的字节数据写出
            int len; //保存每次读取有效的字节个数
            byte[] buf = new byte[1024]; //每次可以拷贝1024个字节

            while ((len = fis.read(buf)) != -1) { //读取
                fos.write(buf,0,len);
            }
            System.out.println(1/0);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //3、资源的释放   先开后关
            //一定执行的代码
            System.out.println("执行了finally");
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (Objects.nonNull(fis)) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
